package com.estagio.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Aluno;
import com.estagio.entity.Cidade;
import com.estagio.session.AlunoSession;
import com.estagio.session.CidadeSession;

@ManagedBean(name="alunoBean")
@SessionScoped
public class AlunoBean {
	
	//ESTADO
	private Aluno aluno = new Aluno();
	private Aluno alunoSave = new Aluno();
	private Aluno alunoSelecionado;
	private String mensagem;
	private DataModel dataModelAluno;
	
	//CIDADE
	private Cidade cidade = new Cidade();
	private Cidade cidadeSelecionado = new Cidade();
	private Cidade cidadeAluno = new Cidade();
	private DataModel dataModelCidade;	
	
	public AlunoBean() {
		this.aluno.setCidade(new Cidade());
		this.cidadeAluno = new Cidade();
	}


	//GETTERS AND SETTERS

	public Aluno getAlunoSave() {
		return alunoSave;
	}

	public void setAlunoSave(Aluno alunoSave) {
		this.alunoSave = alunoSave;
	}

	public DataModel getDataModelAluno() {
		return dataModelAluno;
	}

	public void setDataModelAluno(DataModel dataModelAluno) {
		this.dataModelAluno = dataModelAluno;
	}

	public DataModel getDataModelCidade() {
		return dataModelCidade;
	}

	public void setDataModelCidade(DataModel dataModelCidade) {
		this.dataModelCidade = dataModelCidade;
	}

	public Cidade getCidadeAluno() {
		return cidadeAluno;
	}

	public void setCidadeAluno(Cidade cidadeAluno) {
		this.cidadeAluno = cidadeAluno;
	}

	public Cidade getCidadeSelecionado() {
		return cidadeSelecionado;
	}

	public void setCidadeSelecionado(Cidade cidadeSelecionado) {
		this.cidadeSelecionado = cidadeSelecionado;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}
	
	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Aluno getAlunoSelecionado() {
		return alunoSelecionado;
	}

	public void setAlunoSelecionado(Aluno alunoSelecionado) {
		this.alunoSelecionado = alunoSelecionado;
	}
	
	
	//METODOS ESTADO
	public void saveEditAluno() {
		AlunoSession alunoRN = new AlunoSession();
		Aluno aluno = this.alunoSave;		
		this.mensagem = alunoRN.save(aluno);

		FacesMessage faces = new FacesMessage(mensagem);
		System.out.println(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}	

	public void saveAluno() {
		AlunoSession alunoRN = new AlunoSession();
		Aluno aluno = this.alunoSave;		
		this.mensagem = alunoRN.save(aluno);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}


	public String deleteAluno() {
		AlunoSession alunoRN = new AlunoSession();		
		Aluno aluno = this.alunoSave;
		this.mensagem = alunoRN.delete(aluno);
		this.alunoSave = new Aluno();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarAluno";
	}

	public DataModel findAluno() {
		AlunoSession alunoSession = new AlunoSession();
		List<Aluno> lista = alunoSession.find(this.aluno);
		this.dataModelAluno = new ListDataModel(lista);
		return this.dataModelAluno;
	}
	
	public void clean() {
		this.aluno = new Aluno();
		this.dataModelAluno = new ListDataModel();
	}
	
	//METODOS CIDADE (para dialogs)
	public void saveCidade() {
		CidadeSession cidadeSession = new CidadeSession();
		Cidade cidade = this.cidade;		
		this.mensagem = cidadeSession.save(cidade);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}

	public String deleteCidade() {
		CidadeSession cidadeRN = new CidadeSession();		
		Cidade cidade = this.cidadeSelecionado;
		this.mensagem = cidadeRN.delete(cidade);
		this.cidadeSelecionado = new Cidade();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarCidade";
	}

	public DataModel findCidade() {
		RequestContext.getCurrentInstance().update("panelDialogConsultarCidade");			
		List<Cidade> listaCidade = new CidadeSession().find(this.cidade);
		this.dataModelCidade = new ListDataModel(listaCidade);
		return this.dataModelCidade;
	}
	
	public void selectCidade() {
		Cidade cidadeAux = (Cidade) this.dataModelCidade.getRowData();
		
		System.out.println("cidade datamodel: " + cidadeAux.getDescricao());
		this.alunoSave.setCidade(cidadeAux);

		System.out.println("idcidade alunoSave: " + this.alunoSave.getCidade().getIdCidade());
		System.out.println("cidade alunoSave: " + this.alunoSave.getCidade().getDescricao());
		
		RequestContext.getCurrentInstance().update("pgCidade");
		RequestContext.getCurrentInstance().execute("dialogConsultarCidade.hide()");
	}
	
	//INVOCAR TELAS
	public String newAluno() {
		this.alunoSave = new Aluno();
		this.alunoSave.setCidade(new Cidade());
		return "manterAluno";
	}
	
	public String consultarAluno() {
		this.aluno = new Aluno();
		return "consultarAluno";
	}

	public String editarAluno() {
		this.alunoSave = (Aluno) this.dataModelAluno.getRowData();		
		return "editarAluno";
	}
	
	public String excluirAluno() {
		this.alunoSave = (Aluno) this.dataModelAluno.getRowData();
		return "excluirAluno";
	}
	
	public void openDialogConsultarAluno() {
		RequestContext.getCurrentInstance().update("idDialogConsultarAluno");
		RequestContext.getCurrentInstance().execute("dialogConsultarAluno.show()");
	}
	
	public void openDialogManterAluno() {
		this.alunoSave = new Aluno();
		RequestContext.getCurrentInstance().update("idDialogManterAluno");
		RequestContext.getCurrentInstance().execute("dialogManterAluno.show()");
	}

	public void openDialogConsultarCidade() {
		RequestContext.getCurrentInstance().update("idDialogConsultarCidade");
		RequestContext.getCurrentInstance().execute("dialogConsultarCidade.show()");
	}
	
}
